Итак имена мы научились получать, теперь нам нужен тип и само значение это может сделать функция GetValue:
public object GetValue(string);
Смотрим пример:
using System;
using Microsoft.Win32;
class MainClass
{
public static void Main(string[] args)
{
RegistryKey rk = Registry.CurrentConfig;
GetNext(rk);
}
public static void GetNext(RegistryKey rk)
{
foreach(string cv in rk.GetValueNames())
{
Console.Write("Value - ");
Console.Write(cv);
Console.Write(" - ");
object o = rk.GetValue(cv);
Console.Write(o.GetType());
Console.Write(" - " );
Console.WriteLine(o.ToString());
}
foreach (string s in rk.GetSubKeyNames())
{
Console.WriteLine(s);
GetNext(rk.OpenSubKey(s));
}
}
}
Результат возврата класс Object из него можно получить тип и содержание, смотрите описание Object с шага "Шаг 128 - Основа основ класс Object и ToString". Результат нашей работы.

И реестр.
